Purpose

The purpose of this analysis is to assess significant differences in GSVA scores for each hallmark pathways. Using ANOVA and subsequent Tukey tests, we ask:

  • For each pathway, are GSVA scores significantly different across tumor_descriptor? If so, which timepoints are significantly different?

We perform this using both GSVA scores calculated from RNA-seq libraries. Code is also flexible enough to test a different variable besides tumor_descriptor, etc.

Plots are inspired from here: https://yulab-smu.top/biomedical-knowledge-mining-book/enrichplot.html

Usage

To run this from the command line, use:

Rscript -e "rmarkdown::render('02-model-gsea-transcriptomic-pairs.Rmd', clean = TRUE)" 

This assumes you are in the top directory of the repository.

Setup

Load libraries and define certain constants:

suppressPackageStartupMessages({
  library(tidyverse)
  library(broom)
  library(ggpubr)
  library(ggrepel)
})

Directories and File Inputs/Outputs

# Detect the ".git" folder. This will be in the project root directory.
# Use this as the root directory to ensure proper sourcing of functions
# no matter where this is called from.
root_dir <- rprojroot::find_root(rprojroot::has_dir(".git"))
analysis_dir <- file.path(root_dir, "analyses", "gene-set-enrichment-analysis") 
input_dir <- file.path(analysis_dir, "input")
files_dir <- file.path(root_dir, "analyses", "sample-distribution-analysis", "results")

# Input files
## Metadata file (histologies/clinical data)
metadata_file <- file.path(files_dir, "pbta.tsv") # file from add-sample-distribution module
matched_transcriptomic_file <- file.path(files_dir, "transcriptomic_assays_matched_time_points.tsv") # file from add-sample-distribution module

## GSEA scores
scores_file <- file.path(input_dir, "gsva_scores.tsv")

# File path to plots directory
plots_dir <-
  file.path(analysis_dir, "plots", "paired-transcriptomic")
if (!dir.exists(plots_dir)) {
  dir.create(plots_dir)
}

barplots_dir <-
  file.path(plots_dir, "barplots")
if (!dir.exists(barplots_dir)) {
  dir.create(barplots_dir)
}

diverging_barplots_dir <-
  file.path(plots_dir, "diverging_barplots")
if (!dir.exists(diverging_barplots_dir)) {
  dir.create(diverging_barplots_dir)
}


dotplots_dir <-
  file.path(plots_dir, "dotplots")
if (!dir.exists(dotplots_dir)) {
  dir.create(dotplots_dir)
}

volcano_plots_dir <-
  file.path(plots_dir, "volcano_plots_p_value")
if (!dir.exists(volcano_plots_dir)) {
  dir.create(volcano_plots_dir)
}

# File path to results directory
results_dir <-
  file.path(analysis_dir, "results", "paired-transcriptomic")
if (!dir.exists(results_dir)) {
  dir.create(results_dir)
}


# Significance testing universal threshold
SIGNIFICANCE_THRESHOLD <- 0.01

# This script contains functions used to modeling GSVA scores
source(paste0(analysis_dir, "/util/hallmark_models.R"))
source(paste0(analysis_dir, "/util/function-create-plots.R"))
source(paste0(root_dir, "/figures/scripts/theme.R"))

Read in data and process

######## Load input files
pbta <- readr::read_tsv(metadata_file, guess_max = 100000) %>% 
  filter(experimental_strategy == "RNA-Seq") %>% 
  filter(!is.na(RNA_library))
Rows: 4542 Columns: 62── Column specification ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: "\t"
chr (38): Kids_First_Participant_ID, cg_multiple, cg_id, Kids_First_Biospecimen_ID, sample_id, aliquot_id, experimental_strategy, sample_type, comp...
dbl (10): age_at_diagnosis_days, OS_days, EFS_days, age_last_update_days, normal_fraction, tumor_fraction, tumor_ploidy, age_at_event_days, age_at_...
lgl (14): gtex_group, gtex_subgroup, cell_line_composition, cell_line_passage, tumor_fraction_RFpurify_ABSOLUTE, tumor_fraction_RFpurify_ESTIMATE, ...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Read in matched_transcriptomic_file and get the list of patients 
# with matched time points for the transcriptomic assays
patient_list <- readr::read_tsv(matched_transcriptomic_file, guess_max = 100000, show_col_types = FALSE) %>%
  subset(select = c("Kids_First_Participant_ID", "descriptors"))

#patient_list <- readr::read_tsv(matched_transcriptomic_file, guess_max = 100000, show_col_types = FALSE) %>%
#  subset(select = c("Kids_First_Participant_ID", "descriptors"))

# How many patients with paired assays?
print(length(unique(patient_list$Kids_First_Participant_ID)))
[1] 122
# Add metadata from pbta to patient list
metadata <- patient_list %>% 
  left_join(pbta, by = "Kids_First_Participant_ID")
Warning: Detected an unexpected many-to-many relationship between `x` and `y`.
# Read scores file
scores_file <- readr::read_tsv(scores_file) 
Rows: 193700 Columns: 4── Column specification ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Delimiter: "\t"
chr (3): Kids_First_Biospecimen_ID, hallmark_name, data_type
dbl (1): gsea_score
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Vector to order timepoints
timepoints <- c("Diagnosis", "Progressive", "Recurrence", "Deceased", "Second Malignancy", "Unavailable")

### Merge histology metadata with each set of gsea scores
metadata_with_gsva <- metadata %>%
  inner_join(scores_file, by = "Kids_First_Biospecimen_ID") %>% 
  mutate(tumor_descriptor = factor(tumor_descriptor),
         tumor_descriptor = fct_relevel(tumor_descriptor, timepoints)) %>% 
  filter(!RNA_library == "exome_capture")
Warning: Detected an unexpected many-to-many relationship between `x` and `y`.
# How many patients with paired assays?
print(length(unique(metadata_with_gsva$Kids_First_Participant_ID)))
[1] 121
# How many biospecimens per `RNA_library`?
print(table(metadata_with_gsva$RNA_library))

         poly-A poly-A stranded        stranded 
            550            8300           10950 
######## Find out unique RNA library types
rna_library_list <- metadata_with_gsva %>% pull(data_type) %>% unique()
rna_library_list <- sort(rna_library_list, decreasing = FALSE)
print(rna_library_list)
[1] "polya"          "polya_stranded" "stranded"      
######## Define output files for each unique rna library
tumor_descriptor_anova_outpaths <- lapply(rna_library_list, function(x){
  x<-gsub(" ", "_", x)
  x<-stringr::str_to_lower(gsub("-", "", x))
  file.path(results_dir, paste0("gsva_anova_", x, "_tumor_descriptor.tsv"))
})

tumor_descriptor_tukey_outpaths <- lapply(rna_library_list, function(x){
  x<-gsub(" ", "_", x)
  x<-stringr::str_to_lower(gsub("-", "", x))
  file.path(results_dir, paste0("gsva_tukey_", x, "_tumor_descriptor.tsv"))
})

ANOVA and Tukey analysis of GSVA scores

Here we perform a series of ANOVAs, for polyA and stranded libraries separately, to determine whether mean GSVA scores for a given grouping are significantly different across hallmarks (pathways). The given groupings examined here are cancer_group and tumor_descriptor. In other words, we perform an ANOVA (and associated posthoc Tukey test) for each hallmark as, hallmark ~ grouping. Users can specify the grouping variable.

for(i in 1:length(rna_library_list)){
  print(i)
  
  rna_library = rna_library_list[i]
  print(rna_library)
  # find out the number of `tumor_descriptor` with this RNA library
  tumor_descriptor_n <- metadata_with_gsva %>%
    dplyr::filter(data_type == rna_library) %>%
    dplyr::pull(tumor_descriptor) %>% 
    unique() %>% length()
  
  # anova can only be run on factors with >=2 levels, so to avoid error, we give a if statement
  if(tumor_descriptor_n>=2){
    tumor_descriptor_model_results <- gsva_anova_tukey(metadata_with_gsva, tumor_descriptor, rna_library, SIGNIFICANCE_THRESHOLD) 
  
    ###########################################################################################
   
    # write out results
    readr::write_tsv(tumor_descriptor_model_results[["anova"]], tumor_descriptor_anova_outpaths[[i]])
    readr::write_tsv(tumor_descriptor_model_results[["tukey"]], tumor_descriptor_tukey_outpaths[[i]])
  
    # print results for viewing
    print(rna_library)
    print(head(tumor_descriptor_model_results))
  
    ################ plot results ########################################################
    ###### tukey ######################################################################
    
  
    td_models <- unique(as.character(tumor_descriptor_model_results[["tukey"]]$comparison))
    td_models <- sort(td_models, decreasing = FALSE)
    print(td_models)
  
    for(t in seq_along(td_models)){
      print(t)

      # Re-order bars
      df <- tumor_descriptor_model_results[["tukey"]] %>%
        filter(comparison == td_models[t]) %>% 
        mutate(hallmark_name_id = paste0(hallmark_name, 1:50))
  
      df$hallmark_name <- factor(df$hallmark_name,
                                 levels = rev(unique(df$hallmark_name[order(df$tukey_p_value, decreasing = TRUE)]))) # Factor levels in increasing order
      
      ###### barplots ###########
      name <- paste0(barplots_dir, "/", "gsva_tukey_", rna_library_list[i], "-", td_models[t], "-tumor_descriptor_barplot.pdf")
      print(name)
      p <- create_barplot(df = df,
                          y_value = df$tukey_p_value,
                          title_value = "tukey_p_value",
                          rna_library = rna_library_list[i],
                          td_model_id = td_models[t])
      pdf(file = name, width = 12, height = 10)
      print(p)
      dev.off()
      
      ###### diverging barplots ###########
      name <- paste0(diverging_barplots_dir, "/", "gsva_tukey_", rna_library_list[i], "-", td_models[t], "-tumor_descriptor_diverging_barplot.pdf")
      print(name)
      p <- create_diverging_barplot(df = df,
                                    y_value = df$pathway_score_difference,
                                    title_value = "tukey_p_value",
                                    rna_library = rna_library_list[i],
                                    td_model_id = td_models[t])
      pdf(file = name, width = 12, height = 10)
      print(p)
      dev.off()
    
      
      
      ###### dot plots ###########
      dotplot_name <- paste0(dotplots_dir, "/", "gsva_tukey_", rna_library_list[i], "-", td_models[t], "-tumor_descriptor_dotplot.pdf")
      print(dotplot_name)
      p <- create_dotplot(df = df,
                          x_value = df$hallmark_name,
                          y_value = df$tukey_p_value,
                          title_value = "tukey_p_value",
                          rna_library = rna_library_list[i],
                          td_model_id = td_models[t])
      pdf(file = dotplot_name, width = 12, height = 10)
      print(p)
      dev.off()
      
      ###### volcano plots ###########
      # The significantly differentially pathways are the ones found in the upper-left and upper-right corners.
      # Add a column to the data frame to specify if they are UP- or DOWN- regulated (pathway_score_difference respectively positive or negative)
      
      #Set seed
      set.seed(2023)
      
      # add a new column 
      df$path_diff <- "Not significant"
      p_value <- df$tukey_p_value
      signif_p_value <- 0.05
      # if pathway_score_difference > 0  
      df$path_diff[df$pathway_score_difference > 0 & p_value < signif_p_value] <- "top_ranked_data"
      df$path_diff[df$pathway_score_difference > 0 & p_value > signif_p_value] <- "Not significant"

      # if pathway_score_difference < 0 
      df$path_diff[df$pathway_score_difference < 0 & p_value < signif_p_value] <- "bottom_ranked_data"
      df$path_diff[df$pathway_score_difference < 0 & p_value > signif_p_value] <- "Not significant"
      # Create labels
      df$labels <- with(df, ifelse(p_value < 0.05, hallmark_name_id, ""))
      
      volcano_name <- paste0(volcano_plots_dir, "/", "gsva_tukey_", rna_library_list[i], "-", td_models[t], "-tumor_descriptor_volcano_plot.pdf")
      print(volcano_name)
      p <- create_volcano_plot(df = df,
                               title_value = "tukey_p_value",
                               rna_library = rna_library_list[i],
                               td_model_id = td_models[t])
      pdf(file = volcano_name, width = 12, height = 10)
      print(p)
      dev.off()
      
    }
    
    ###### anova ######################################################################
    ###### barplots ###########    
    name <- paste0(barplots_dir, "/", "gsva_anova_", rna_library_list[i], "-tumor_descriptor_barplot.pdf")
    print(name)
  
    # Re-order bars
    df <- tumor_descriptor_model_results[["anova"]]
    df$hallmark_name <- factor(df$hallmark_name,
                               levels = rev(unique(df$hallmark_name[order(df$anova_p_value, decreasing = TRUE)]))) # Factor levels in increasing order
    p <- create_barplot(df = df,
                        y_value = df$anova_p_value,
                        title_value = "anova_p_value", 
                        rna_library = rna_library_list[i],
                        td_model_id = NULL)
    pdf(file = name, width = 12, height = 10)
    print(p)
    dev.off()
      
    ###### dot plots ###########
    dotplot_name <- paste0(dotplots_dir, "/", "gsva_anova_", rna_library, "-tumor_descriptor_dotplot.pdf")
    print(dotplot_name)
    p <- create_dotplot(df = tumor_descriptor_model_results[["anova"]],
                        x_value = tumor_descriptor_model_results[["anova"]]$hallmark_name,
                        y_value = tumor_descriptor_model_results[["anova"]]$anova_p_value,
                        title_value = "anova_p_value",
                        rna_library = rna_library_list[i],
                        td_model_id = NULL)
    pdf(file = dotplot_name, width = 12, height = 10)
    print(p)
    dev.off()
    }
}
for(i in 1:length(rna_library_list)){
  print(i)
  
  rna_library = rna_library_list[i]
  print(rna_library)
  # find out the number of `tumor_descriptor` with this RNA library
  tumor_descriptor_n <- metadata_with_gsva %>%
    dplyr::filter(data_type == rna_library) %>%
    dplyr::pull(tumor_descriptor) %>% 
    unique() %>% length()
  
  # anova can only be run on factors with >=2 levels, so to avoid error, we give a if statement
  if(tumor_descriptor_n>=2){
    tumor_descriptor_model_results <- gsva_anova_tukey(metadata_with_gsva, tumor_descriptor, rna_library, SIGNIFICANCE_THRESHOLD) 
  
    ###########################################################################################
   
    # write out results
    readr::write_tsv(tumor_descriptor_model_results[["anova"]], tumor_descriptor_anova_outpaths[[i]])
    readr::write_tsv(tumor_descriptor_model_results[["tukey"]], tumor_descriptor_tukey_outpaths[[i]])
  
    # print results for viewing
    print(rna_library)
    print(head(tumor_descriptor_model_results))
  
    ################ plot results ########################################################
    ###### tukey ######################################################################
    
  
    td_models <- unique(as.character(tumor_descriptor_model_results[["tukey"]]$comparison))
    td_models <- sort(td_models, decreasing = FALSE)
    print(td_models)
  
    for(t in seq_along(td_models)){
      print(t)

      # Re-order bars
      df <- tumor_descriptor_model_results[["tukey"]] %>%
        filter(comparison == td_models[t]) %>% 
        mutate(hallmark_name_id = paste0(hallmark_name, 1:50))
  
      df$hallmark_name <- factor(df$hallmark_name,
                                 levels = rev(unique(df$hallmark_name[order(df$tukey_p_value, decreasing = TRUE)]))) # Factor levels in increasing order
      
      ###### barplots ###########
      name <- paste0(barplots_dir, "/", "gsva_tukey_", rna_library_list[i], "-", td_models[t], "-tumor_descriptor_barplot.pdf")
      print(name)
      p <- create_barplot(df = df,
                          y_value = df$tukey_p_value,
                          title_value = "tukey_p_value",
                          rna_library = rna_library_list[i],
                          td_model_id = td_models[t])
      pdf(file = name, width = 12, height = 10)
      print(p)
      dev.off()
      
      ###### diverging barplots ###########
      name <- paste0(diverging_barplots_dir, "/", "gsva_tukey_", rna_library_list[i], "-", td_models[t], "-tumor_descriptor_diverging_barplot.pdf")
      print(name)
      p <- create_diverging_barplot(df = df,
                                    y_value = df$pathway_score_difference,
                                    title_value = "tukey_p_value",
                                    rna_library = rna_library_list[i],
                                    td_model_id = td_models[t])
      pdf(file = name, width = 12, height = 10)
      print(p)
      dev.off()
    
      
      
      ###### dot plots ###########
      dotplot_name <- paste0(dotplots_dir, "/", "gsva_tukey_", rna_library_list[i], "-", td_models[t], "-tumor_descriptor_dotplot.pdf")
      print(dotplot_name)
      p <- create_dotplot(df = df,
                          x_value = df$hallmark_name,
                          y_value = df$tukey_p_value,
                          title_value = "tukey_p_value",
                          rna_library = rna_library_list[i],
                          td_model_id = td_models[t])
      pdf(file = dotplot_name, width = 12, height = 10)
      print(p)
      dev.off()
      
      ###### volcano plots ###########
      # The significantly differentially pathways are the ones found in the upper-left and upper-right corners.
      # Add a column to the data frame to specify if they are UP- or DOWN- regulated (pathway_score_difference respectively positive or negative)
      
      #Set seed
      set.seed(2023)
      
      # add a new column 
      df$path_diff <- "Not significant"
      p_value <- df$tukey_p_value
      signif_p_value <- 0.05
      # if pathway_score_difference > 0  
      df$path_diff[df$pathway_score_difference > 0 & p_value < signif_p_value] <- "top_ranked_data"
      df$path_diff[df$pathway_score_difference > 0 & p_value > signif_p_value] <- "Not significant"

      # if pathway_score_difference < 0 
      df$path_diff[df$pathway_score_difference < 0 & p_value < signif_p_value] <- "bottom_ranked_data"
      df$path_diff[df$pathway_score_difference < 0 & p_value > signif_p_value] <- "Not significant"
      # Create labels
      df$labels <- with(df, ifelse(p_value < 0.05, hallmark_name_id, ""))
      
      volcano_name <- paste0(volcano_plots_dir, "/", "gsva_tukey_", rna_library_list[i], "-", td_models[t], "-tumor_descriptor_volcano_plot.pdf")
      print(volcano_name)
      p <- create_volcano_plot(df = df,
                               title_value = "tukey_p_value",
                               rna_library = rna_library_list[i],
                               td_model_id = td_models[t])
      pdf(file = volcano_name, width = 12, height = 10)
      print(p)
      dev.off()
      
    }
    
    ###### anova ######################################################################
    ###### barplots ###########    
    name <- paste0(barplots_dir, "/", "gsva_anova_", rna_library_list[i], "-tumor_descriptor_barplot.pdf")
    print(name)
  
    # Re-order bars
    df <- tumor_descriptor_model_results[["anova"]]
    df$hallmark_name <- factor(df$hallmark_name,
                               levels = rev(unique(df$hallmark_name[order(df$anova_p_value, decreasing = TRUE)]))) # Factor levels in increasing order
    p <- create_barplot(df = df,
                        y_value = df$anova_p_value,
                        title_value = "anova_p_value", 
                        rna_library = rna_library_list[i],
                        td_model_id = NULL)
    pdf(file = name, width = 12, height = 10)
    print(p)
    dev.off()
      
    ###### dot plots ###########
    dotplot_name <- paste0(dotplots_dir, "/", "gsva_anova_", rna_library, "-tumor_descriptor_dotplot.pdf")
    print(dotplot_name)
    p <- create_dotplot(df = tumor_descriptor_model_results[["anova"]],
                        x_value = tumor_descriptor_model_results[["anova"]]$hallmark_name,
                        y_value = tumor_descriptor_model_results[["anova"]]$anova_p_value,
                        title_value = "anova_p_value",
                        rna_library = rna_library_list[i],
                        td_model_id = NULL)
    pdf(file = dotplot_name, width = 12, height = 10)
    print(p)
    dev.off()
    }
}
[1] 1
[1] "polya"
[1] 50
[1] "polya"
$anova

$tukey

[1] "Progressive-Diagnosis"
[1] 1
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_polya-Progressive-Diagnosis-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_polya-Progressive-Diagnosis-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_polya-Progressive-Diagnosis-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_polya-Progressive-Diagnosis-tumor_descriptor_volcano_plot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_anova_polya-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_anova_polya-tumor_descriptor_dotplot.pdf"
[1] 2
[1] "polya_stranded"
[1] 50
[1] "polya_stranded"
$anova

$tukey

 [1] "Deceased-Diagnosis"            "Deceased-Progressive"          "Deceased-Recurrence"           "Progressive-Diagnosis"        
 [5] "Recurrence-Diagnosis"          "Recurrence-Progressive"        "Second Malignancy-Deceased"    "Second Malignancy-Diagnosis"  
 [9] "Second Malignancy-Progressive" "Second Malignancy-Recurrence" 
[1] 1
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_polya_stranded-Deceased-Diagnosis-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_polya_stranded-Deceased-Diagnosis-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_polya_stranded-Deceased-Diagnosis-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_polya_stranded-Deceased-Diagnosis-tumor_descriptor_volcano_plot.pdf"
[1] 2
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_polya_stranded-Deceased-Progressive-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_polya_stranded-Deceased-Progressive-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_polya_stranded-Deceased-Progressive-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_polya_stranded-Deceased-Progressive-tumor_descriptor_volcano_plot.pdf"
[1] 3
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_polya_stranded-Deceased-Recurrence-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_polya_stranded-Deceased-Recurrence-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_polya_stranded-Deceased-Recurrence-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_polya_stranded-Deceased-Recurrence-tumor_descriptor_volcano_plot.pdf"
[1] 4
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_polya_stranded-Progressive-Diagnosis-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_polya_stranded-Progressive-Diagnosis-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_polya_stranded-Progressive-Diagnosis-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_polya_stranded-Progressive-Diagnosis-tumor_descriptor_volcano_plot.pdf"
[1] 5
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_polya_stranded-Recurrence-Diagnosis-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_polya_stranded-Recurrence-Diagnosis-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_polya_stranded-Recurrence-Diagnosis-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_polya_stranded-Recurrence-Diagnosis-tumor_descriptor_volcano_plot.pdf"
[1] 6
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_polya_stranded-Recurrence-Progressive-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_polya_stranded-Recurrence-Progressive-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_polya_stranded-Recurrence-Progressive-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_polya_stranded-Recurrence-Progressive-tumor_descriptor_volcano_plot.pdf"
[1] 7
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_polya_stranded-Second Malignancy-Deceased-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_polya_stranded-Second Malignancy-Deceased-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_polya_stranded-Second Malignancy-Deceased-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_polya_stranded-Second Malignancy-Deceased-tumor_descriptor_volcano_plot.pdf"
[1] 8
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_polya_stranded-Second Malignancy-Diagnosis-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_polya_stranded-Second Malignancy-Diagnosis-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_polya_stranded-Second Malignancy-Diagnosis-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_polya_stranded-Second Malignancy-Diagnosis-tumor_descriptor_volcano_plot.pdf"
[1] 9
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_polya_stranded-Second Malignancy-Progressive-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_polya_stranded-Second Malignancy-Progressive-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_polya_stranded-Second Malignancy-Progressive-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_polya_stranded-Second Malignancy-Progressive-tumor_descriptor_volcano_plot.pdf"
[1] 10
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_polya_stranded-Second Malignancy-Recurrence-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_polya_stranded-Second Malignancy-Recurrence-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_polya_stranded-Second Malignancy-Recurrence-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_polya_stranded-Second Malignancy-Recurrence-tumor_descriptor_volcano_plot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_anova_polya_stranded-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_anova_polya_stranded-tumor_descriptor_dotplot.pdf"
[1] 3
[1] "stranded"
[1] 50
[1] "stranded"
$anova

$tukey

 [1] "Deceased-Diagnosis"            "Deceased-Progressive"          "Deceased-Recurrence"           "Progressive-Diagnosis"        
 [5] "Recurrence-Diagnosis"          "Recurrence-Progressive"        "Second Malignancy-Deceased"    "Second Malignancy-Diagnosis"  
 [9] "Second Malignancy-Progressive" "Second Malignancy-Recurrence"  "Unavailable-Deceased"          "Unavailable-Diagnosis"        
[13] "Unavailable-Progressive"       "Unavailable-Recurrence"        "Unavailable-Second Malignancy"
[1] 1
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Deceased-Diagnosis-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Deceased-Diagnosis-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Deceased-Diagnosis-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Deceased-Diagnosis-tumor_descriptor_volcano_plot.pdf"
[1] 2
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Deceased-Progressive-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Deceased-Progressive-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Deceased-Progressive-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Deceased-Progressive-tumor_descriptor_volcano_plot.pdf"
[1] 3
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Deceased-Recurrence-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Deceased-Recurrence-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Deceased-Recurrence-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Deceased-Recurrence-tumor_descriptor_volcano_plot.pdf"
[1] 4
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Progressive-Diagnosis-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Progressive-Diagnosis-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Progressive-Diagnosis-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Progressive-Diagnosis-tumor_descriptor_volcano_plot.pdf"
[1] 5
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Recurrence-Diagnosis-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Recurrence-Diagnosis-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Recurrence-Diagnosis-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Recurrence-Diagnosis-tumor_descriptor_volcano_plot.pdf"
[1] 6
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Recurrence-Progressive-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Recurrence-Progressive-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Recurrence-Progressive-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Recurrence-Progressive-tumor_descriptor_volcano_plot.pdf"
[1] 7
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Second Malignancy-Deceased-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Second Malignancy-Deceased-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Second Malignancy-Deceased-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Second Malignancy-Deceased-tumor_descriptor_volcano_plot.pdf"
[1] 8
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Second Malignancy-Diagnosis-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Second Malignancy-Diagnosis-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Second Malignancy-Diagnosis-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Second Malignancy-Diagnosis-tumor_descriptor_volcano_plot.pdf"
[1] 9
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Second Malignancy-Progressive-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Second Malignancy-Progressive-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Second Malignancy-Progressive-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Second Malignancy-Progressive-tumor_descriptor_volcano_plot.pdf"
[1] 10
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Second Malignancy-Recurrence-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Second Malignancy-Recurrence-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Second Malignancy-Recurrence-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Second Malignancy-Recurrence-tumor_descriptor_volcano_plot.pdf"
[1] 11
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Unavailable-Deceased-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Unavailable-Deceased-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Unavailable-Deceased-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Unavailable-Deceased-tumor_descriptor_volcano_plot.pdf"
[1] 12
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Unavailable-Diagnosis-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Unavailable-Diagnosis-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Unavailable-Diagnosis-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Unavailable-Diagnosis-tumor_descriptor_volcano_plot.pdf"
[1] 13
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Unavailable-Progressive-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Unavailable-Progressive-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Unavailable-Progressive-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Unavailable-Progressive-tumor_descriptor_volcano_plot.pdf"
[1] 14
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Unavailable-Recurrence-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Unavailable-Recurrence-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Unavailable-Recurrence-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Unavailable-Recurrence-tumor_descriptor_volcano_plot.pdf"
[1] 15
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_tukey_stranded-Unavailable-Second Malignancy-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/diverging_barplots/gsva_tukey_stranded-Unavailable-Second Malignancy-tumor_descriptor_diverging_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_tukey_stranded-Unavailable-Second Malignancy-tumor_descriptor_dotplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/volcano_plots_p_value/gsva_tukey_stranded-Unavailable-Second Malignancy-tumor_descriptor_volcano_plot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/barplots/gsva_anova_stranded-tumor_descriptor_barplot.pdf"
[1] "/Users/chronia/CHOP/GitHub/pbta-tumor-evolution/analyses/gene-set-enrichment-analysis/plots/paired-transcriptomic/dotplots/gsva_anova_stranded-tumor_descriptor_dotplot.pdf"

LS0tCnRpdGxlOiAiR1NWQSBTY29yZSBNb2RlbGluZyIKYXV0aG9yOiAiQW50b25pYSBDaHJvbmkgPGNocm9uaWFAY2hvcC5lZHU+IGZvciBEM0IiCmRhdGU6ICIyMDIzIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCi0tLQoKIyMjIFB1cnBvc2UKClRoZSBwdXJwb3NlIG9mIHRoaXMgYW5hbHlzaXMgaXMgdG8gYXNzZXNzIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIEdTVkEgc2NvcmVzIGZvciBlYWNoIGhhbGxtYXJrIHBhdGh3YXlzLiBVc2luZyBBTk9WQSBhbmQgc3Vic2VxdWVudCBUdWtleSB0ZXN0cywgd2UgYXNrOgoKKyBGb3IgZWFjaCBwYXRod2F5LCBhcmUgR1NWQSBzY29yZXMgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgYWNyb3NzIGB0dW1vcl9kZXNjcmlwdG9yYD8gSWYgc28sIHdoaWNoIHRpbWVwb2ludHMgYXJlIHNpZ25pZmljYW50bHkgZGlmZmVyZW50PwoKV2UgcGVyZm9ybSB0aGlzIHVzaW5nIGJvdGggR1NWQSBzY29yZXMgY2FsY3VsYXRlZCBmcm9tIFJOQS1zZXEgbGlicmFyaWVzLiBDb2RlIGlzIGFsc28gZmxleGlibGUgZW5vdWdoIHRvIHRlc3QgYSBkaWZmZXJlbnQgdmFyaWFibGUgYmVzaWRlcyBgdHVtb3JfZGVzY3JpcHRvcmAsIGV0Yy4KCgpQbG90cyBhcmUgaW5zcGlyZWQgZnJvbSBoZXJlOiBodHRwczovL3l1bGFiLXNtdS50b3AvYmlvbWVkaWNhbC1rbm93bGVkZ2UtbWluaW5nLWJvb2svZW5yaWNocGxvdC5odG1sCgojIyMgVXNhZ2UKClRvIHJ1biB0aGlzIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdXNlOgpgYGAKUnNjcmlwdCAtZSAicm1hcmtkb3duOjpyZW5kZXIoJzAyLW1vZGVsLWdzZWEtdHJhbnNjcmlwdG9taWMtcGFpcnMuUm1kJywgY2xlYW4gPSBUUlVFKSIgCmBgYApfVGhpcyBhc3N1bWVzIHlvdSBhcmUgaW4gdGhlIHRvcCBkaXJlY3Rvcnkgb2YgdGhlIHJlcG9zaXRvcnkuXwoKIyBTZXR1cAoKTG9hZCBsaWJyYXJpZXMgYW5kIGRlZmluZSBjZXJ0YWluIGNvbnN0YW50czoKCmBgYHtyIGxvYWQtbGlicmFyeX0Kc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKHsKICBsaWJyYXJ5KHRpZHl2ZXJzZSkKICBsaWJyYXJ5KGJyb29tKQogIGxpYnJhcnkoZ2dwdWJyKQogIGxpYnJhcnkoZ2dyZXBlbCkKfSkKYGBgCgoKIyMgRGlyZWN0b3JpZXMgYW5kIEZpbGUgSW5wdXRzL091dHB1dHMKCmBgYHtyIHNldC1kaXItYW5kLWZpbGUtbmFtZXN9CiMgRGV0ZWN0IHRoZSAiLmdpdCIgZm9sZGVyLiBUaGlzIHdpbGwgYmUgaW4gdGhlIHByb2plY3Qgcm9vdCBkaXJlY3RvcnkuCiMgVXNlIHRoaXMgYXMgdGhlIHJvb3QgZGlyZWN0b3J5IHRvIGVuc3VyZSBwcm9wZXIgc291cmNpbmcgb2YgZnVuY3Rpb25zCiMgbm8gbWF0dGVyIHdoZXJlIHRoaXMgaXMgY2FsbGVkIGZyb20uCnJvb3RfZGlyIDwtIHJwcm9qcm9vdDo6ZmluZF9yb290KHJwcm9qcm9vdDo6aGFzX2RpcigiLmdpdCIpKQphbmFseXNpc19kaXIgPC0gZmlsZS5wYXRoKHJvb3RfZGlyLCAiYW5hbHlzZXMiLCAiZ2VuZS1zZXQtZW5yaWNobWVudC1hbmFseXNpcyIpIAppbnB1dF9kaXIgPC0gZmlsZS5wYXRoKGFuYWx5c2lzX2RpciwgImlucHV0IikKZmlsZXNfZGlyIDwtIGZpbGUucGF0aChyb290X2RpciwgImFuYWx5c2VzIiwgInNhbXBsZS1kaXN0cmlidXRpb24tYW5hbHlzaXMiLCAicmVzdWx0cyIpCgojIElucHV0IGZpbGVzCiMjIE1ldGFkYXRhIGZpbGUgKGhpc3RvbG9naWVzL2NsaW5pY2FsIGRhdGEpCm1ldGFkYXRhX2ZpbGUgPC0gZmlsZS5wYXRoKGZpbGVzX2RpciwgInBidGEudHN2IikgIyBmaWxlIGZyb20gYWRkLXNhbXBsZS1kaXN0cmlidXRpb24gbW9kdWxlCm1hdGNoZWRfdHJhbnNjcmlwdG9taWNfZmlsZSA8LSBmaWxlLnBhdGgoZmlsZXNfZGlyLCAidHJhbnNjcmlwdG9taWNfYXNzYXlzX21hdGNoZWRfdGltZV9wb2ludHMudHN2IikgIyBmaWxlIGZyb20gYWRkLXNhbXBsZS1kaXN0cmlidXRpb24gbW9kdWxlCgojIyBHU0VBIHNjb3JlcwpzY29yZXNfZmlsZSA8LSBmaWxlLnBhdGgoaW5wdXRfZGlyLCAiZ3N2YV9zY29yZXMudHN2IikKCiMgRmlsZSBwYXRoIHRvIHBsb3RzIGRpcmVjdG9yeQpwbG90c19kaXIgPC0KICBmaWxlLnBhdGgoYW5hbHlzaXNfZGlyLCAicGxvdHMiLCAicGFpcmVkLXRyYW5zY3JpcHRvbWljIikKaWYgKCFkaXIuZXhpc3RzKHBsb3RzX2RpcikpIHsKICBkaXIuY3JlYXRlKHBsb3RzX2RpcikKfQoKYmFycGxvdHNfZGlyIDwtCiAgZmlsZS5wYXRoKHBsb3RzX2RpciwgImJhcnBsb3RzIikKaWYgKCFkaXIuZXhpc3RzKGJhcnBsb3RzX2RpcikpIHsKICBkaXIuY3JlYXRlKGJhcnBsb3RzX2RpcikKfQoKZGl2ZXJnaW5nX2JhcnBsb3RzX2RpciA8LQogIGZpbGUucGF0aChwbG90c19kaXIsICJkaXZlcmdpbmdfYmFycGxvdHMiKQppZiAoIWRpci5leGlzdHMoZGl2ZXJnaW5nX2JhcnBsb3RzX2RpcikpIHsKICBkaXIuY3JlYXRlKGRpdmVyZ2luZ19iYXJwbG90c19kaXIpCn0KCgpkb3RwbG90c19kaXIgPC0KICBmaWxlLnBhdGgocGxvdHNfZGlyLCAiZG90cGxvdHMiKQppZiAoIWRpci5leGlzdHMoZG90cGxvdHNfZGlyKSkgewogIGRpci5jcmVhdGUoZG90cGxvdHNfZGlyKQp9Cgp2b2xjYW5vX3Bsb3RzX2RpciA8LQogIGZpbGUucGF0aChwbG90c19kaXIsICJ2b2xjYW5vX3Bsb3RzX3BfdmFsdWUiKQppZiAoIWRpci5leGlzdHModm9sY2Fub19wbG90c19kaXIpKSB7CiAgZGlyLmNyZWF0ZSh2b2xjYW5vX3Bsb3RzX2RpcikKfQoKIyBGaWxlIHBhdGggdG8gcmVzdWx0cyBkaXJlY3RvcnkKcmVzdWx0c19kaXIgPC0KICBmaWxlLnBhdGgoYW5hbHlzaXNfZGlyLCAicmVzdWx0cyIsICJwYWlyZWQtdHJhbnNjcmlwdG9taWMiKQppZiAoIWRpci5leGlzdHMocmVzdWx0c19kaXIpKSB7CiAgZGlyLmNyZWF0ZShyZXN1bHRzX2RpcikKfQoKCiMgU2lnbmlmaWNhbmNlIHRlc3RpbmcgdW5pdmVyc2FsIHRocmVzaG9sZApTSUdOSUZJQ0FOQ0VfVEhSRVNIT0xEIDwtIDAuMDEKCiMgVGhpcyBzY3JpcHQgY29udGFpbnMgZnVuY3Rpb25zIHVzZWQgdG8gbW9kZWxpbmcgR1NWQSBzY29yZXMKc291cmNlKHBhc3RlMChhbmFseXNpc19kaXIsICIvdXRpbC9oYWxsbWFya19tb2RlbHMuUiIpKQpzb3VyY2UocGFzdGUwKGFuYWx5c2lzX2RpciwgIi91dGlsL2Z1bmN0aW9uLWNyZWF0ZS1wbG90cy5SIikpCnNvdXJjZShwYXN0ZTAocm9vdF9kaXIsICIvZmlndXJlcy9zY3JpcHRzL3RoZW1lLlIiKSkKYGBgCgojIyBSZWFkIGluIGRhdGEgYW5kIHByb2Nlc3MKCmBgYHtyIHJlYWQtaW5wdXQtZmlsZXN9CiMjIyMjIyMjIExvYWQgaW5wdXQgZmlsZXMKcGJ0YSA8LSByZWFkcjo6cmVhZF90c3YobWV0YWRhdGFfZmlsZSwgZ3Vlc3NfbWF4ID0gMTAwMDAwKSAlPiUgCiAgZmlsdGVyKGV4cGVyaW1lbnRhbF9zdHJhdGVneSA9PSAiUk5BLVNlcSIpICU+JSAKICBmaWx0ZXIoIWlzLm5hKFJOQV9saWJyYXJ5KSkKCiMgUmVhZCBpbiBtYXRjaGVkX3RyYW5zY3JpcHRvbWljX2ZpbGUgYW5kIGdldCB0aGUgbGlzdCBvZiBwYXRpZW50cyAKIyB3aXRoIG1hdGNoZWQgdGltZSBwb2ludHMgZm9yIHRoZSB0cmFuc2NyaXB0b21pYyBhc3NheXMKcGF0aWVudF9saXN0IDwtIHJlYWRyOjpyZWFkX3RzdihtYXRjaGVkX3RyYW5zY3JpcHRvbWljX2ZpbGUsIGd1ZXNzX21heCA9IDEwMDAwMCwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkgJT4lCiAgc3Vic2V0KHNlbGVjdCA9IGMoIktpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQiLCAiZGVzY3JpcHRvcnMiKSkKCiNwYXRpZW50X2xpc3QgPC0gcmVhZHI6OnJlYWRfdHN2KG1hdGNoZWRfdHJhbnNjcmlwdG9taWNfZmlsZSwgZ3Vlc3NfbWF4ID0gMTAwMDAwLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKSAlPiUKIyAgc3Vic2V0KHNlbGVjdCA9IGMoIktpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQiLCAiZGVzY3JpcHRvcnMiKSkKCiMgSG93IG1hbnkgcGF0aWVudHMgd2l0aCBwYWlyZWQgYXNzYXlzPwpwcmludChsZW5ndGgodW5pcXVlKHBhdGllbnRfbGlzdCRLaWRzX0ZpcnN0X1BhcnRpY2lwYW50X0lEKSkpCgojIEFkZCBtZXRhZGF0YSBmcm9tIHBidGEgdG8gcGF0aWVudCBsaXN0Cm1ldGFkYXRhIDwtIHBhdGllbnRfbGlzdCAlPiUgCiAgbGVmdF9qb2luKHBidGEsIGJ5ID0gIktpZHNfRmlyc3RfUGFydGljaXBhbnRfSUQiKQoKIyBSZWFkIHNjb3JlcyBmaWxlCnNjb3Jlc19maWxlIDwtIHJlYWRyOjpyZWFkX3RzdihzY29yZXNfZmlsZSkgCgojIFZlY3RvciB0byBvcmRlciB0aW1lcG9pbnRzCnRpbWVwb2ludHMgPC0gYygiRGlhZ25vc2lzIiwgIlByb2dyZXNzaXZlIiwgIlJlY3VycmVuY2UiLCAiRGVjZWFzZWQiLCAiU2Vjb25kIE1hbGlnbmFuY3kiLCAiVW5hdmFpbGFibGUiKQoKIyMjIE1lcmdlIGhpc3RvbG9neSBtZXRhZGF0YSB3aXRoIGVhY2ggc2V0IG9mIGdzZWEgc2NvcmVzCm1ldGFkYXRhX3dpdGhfZ3N2YSA8LSBtZXRhZGF0YSAlPiUKICBpbm5lcl9qb2luKHNjb3Jlc19maWxlLCBieSA9ICJLaWRzX0ZpcnN0X0Jpb3NwZWNpbWVuX0lEIikgJT4lIAogIG11dGF0ZSh0dW1vcl9kZXNjcmlwdG9yID0gZmFjdG9yKHR1bW9yX2Rlc2NyaXB0b3IpLAogICAgICAgICB0dW1vcl9kZXNjcmlwdG9yID0gZmN0X3JlbGV2ZWwodHVtb3JfZGVzY3JpcHRvciwgdGltZXBvaW50cykpICU+JSAKICBmaWx0ZXIoIVJOQV9saWJyYXJ5ID09ICJleG9tZV9jYXB0dXJlIikKCiMgSG93IG1hbnkgcGF0aWVudHMgd2l0aCBwYWlyZWQgYXNzYXlzPwpwcmludChsZW5ndGgodW5pcXVlKG1ldGFkYXRhX3dpdGhfZ3N2YSRLaWRzX0ZpcnN0X1BhcnRpY2lwYW50X0lEKSkpCgojIEhvdyBtYW55IGJpb3NwZWNpbWVucyBwZXIgYFJOQV9saWJyYXJ5YD8KcHJpbnQodGFibGUobWV0YWRhdGFfd2l0aF9nc3ZhJFJOQV9saWJyYXJ5KSkKCiMjIyMjIyMjIEZpbmQgb3V0IHVuaXF1ZSBSTkEgbGlicmFyeSB0eXBlcwpybmFfbGlicmFyeV9saXN0IDwtIG1ldGFkYXRhX3dpdGhfZ3N2YSAlPiUgcHVsbChkYXRhX3R5cGUpICU+JSB1bmlxdWUoKQpybmFfbGlicmFyeV9saXN0IDwtIHNvcnQocm5hX2xpYnJhcnlfbGlzdCwgZGVjcmVhc2luZyA9IEZBTFNFKQpwcmludChybmFfbGlicmFyeV9saXN0KQoKIyMjIyMjIyMgRGVmaW5lIG91dHB1dCBmaWxlcyBmb3IgZWFjaCB1bmlxdWUgcm5hIGxpYnJhcnkKdHVtb3JfZGVzY3JpcHRvcl9hbm92YV9vdXRwYXRocyA8LSBsYXBwbHkocm5hX2xpYnJhcnlfbGlzdCwgZnVuY3Rpb24oeCl7CiAgeDwtZ3N1YigiICIsICJfIiwgeCkKICB4PC1zdHJpbmdyOjpzdHJfdG9fbG93ZXIoZ3N1YigiLSIsICIiLCB4KSkKICBmaWxlLnBhdGgocmVzdWx0c19kaXIsIHBhc3RlMCgiZ3N2YV9hbm92YV8iLCB4LCAiX3R1bW9yX2Rlc2NyaXB0b3IudHN2IikpCn0pCgp0dW1vcl9kZXNjcmlwdG9yX3R1a2V5X291dHBhdGhzIDwtIGxhcHBseShybmFfbGlicmFyeV9saXN0LCBmdW5jdGlvbih4KXsKICB4PC1nc3ViKCIgIiwgIl8iLCB4KQogIHg8LXN0cmluZ3I6OnN0cl90b19sb3dlcihnc3ViKCItIiwgIiIsIHgpKQogIGZpbGUucGF0aChyZXN1bHRzX2RpciwgcGFzdGUwKCJnc3ZhX3R1a2V5XyIsIHgsICJfdHVtb3JfZGVzY3JpcHRvci50c3YiKSkKfSkKCmBgYAoKCiMjIyBBTk9WQSBhbmQgVHVrZXkgYW5hbHlzaXMgb2YgR1NWQSBzY29yZXMKCkhlcmUgd2UgcGVyZm9ybSBhIHNlcmllcyBvZiBBTk9WQXMsIGZvciBwb2x5QSBhbmQgc3RyYW5kZWQgbGlicmFyaWVzIHNlcGFyYXRlbHksIHRvIGRldGVybWluZSB3aGV0aGVyIG1lYW4gR1NWQSBzY29yZXMgZm9yIGEgZ2l2ZW4gZ3JvdXBpbmcgYXJlIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGFjcm9zcyBoYWxsbWFya3MgKHBhdGh3YXlzKS4gVGhlIGdpdmVuIGdyb3VwaW5ncyBleGFtaW5lZCBoZXJlIGFyZSBgY2FuY2VyX2dyb3VwYCBhbmQgYHR1bW9yX2Rlc2NyaXB0b3JgLiAKSW4gb3RoZXIgd29yZHMsIHdlIHBlcmZvcm0gYW4gQU5PVkEgKGFuZCBhc3NvY2lhdGVkIHBvc3Rob2MgVHVrZXkgdGVzdCkgZm9yIGVhY2ggaGFsbG1hcmsgYXMsIGBoYWxsbWFyayB+IGdyb3VwaW5nYC4gVXNlcnMgY2FuIHNwZWNpZnkgdGhlIGdyb3VwaW5nIHZhcmlhYmxlLgoKCmBgYHtyLCBhb3YtcGVyZm9ybS1wbG90LCBmaWcud2lkdGggPSAxMiwgZmlnLmhlaWdodCA9IDEwLCBmaWcuZnVsbHdpZHRoID0gVFJVRSwgZWNobyA9IFRSVUV9CmZvcihpIGluIDE6bGVuZ3RoKHJuYV9saWJyYXJ5X2xpc3QpKXsKICBwcmludChpKQogIAogIHJuYV9saWJyYXJ5ID0gcm5hX2xpYnJhcnlfbGlzdFtpXQogIHByaW50KHJuYV9saWJyYXJ5KQogICMgZmluZCBvdXQgdGhlIG51bWJlciBvZiBgdHVtb3JfZGVzY3JpcHRvcmAgd2l0aCB0aGlzIFJOQSBsaWJyYXJ5CiAgdHVtb3JfZGVzY3JpcHRvcl9uIDwtIG1ldGFkYXRhX3dpdGhfZ3N2YSAlPiUKICAgIGRwbHlyOjpmaWx0ZXIoZGF0YV90eXBlID09IHJuYV9saWJyYXJ5KSAlPiUKICAgIGRwbHlyOjpwdWxsKHR1bW9yX2Rlc2NyaXB0b3IpICU+JSAKICAgIHVuaXF1ZSgpICU+JSBsZW5ndGgoKQogIAogICMgYW5vdmEgY2FuIG9ubHkgYmUgcnVuIG9uIGZhY3RvcnMgd2l0aCA+PTIgbGV2ZWxzLCBzbyB0byBhdm9pZCBlcnJvciwgd2UgZ2l2ZSBhIGlmIHN0YXRlbWVudAogIGlmKHR1bW9yX2Rlc2NyaXB0b3Jfbj49Mil7CiAgICB0dW1vcl9kZXNjcmlwdG9yX21vZGVsX3Jlc3VsdHMgPC0gZ3N2YV9hbm92YV90dWtleShtZXRhZGF0YV93aXRoX2dzdmEsIHR1bW9yX2Rlc2NyaXB0b3IsIHJuYV9saWJyYXJ5LCBTSUdOSUZJQ0FOQ0VfVEhSRVNIT0xEKSAKICAKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgCiAgICAjIHdyaXRlIG91dCByZXN1bHRzCiAgICByZWFkcjo6d3JpdGVfdHN2KHR1bW9yX2Rlc2NyaXB0b3JfbW9kZWxfcmVzdWx0c1tbImFub3ZhIl1dLCB0dW1vcl9kZXNjcmlwdG9yX2Fub3ZhX291dHBhdGhzW1tpXV0pCiAgICByZWFkcjo6d3JpdGVfdHN2KHR1bW9yX2Rlc2NyaXB0b3JfbW9kZWxfcmVzdWx0c1tbInR1a2V5Il1dLCB0dW1vcl9kZXNjcmlwdG9yX3R1a2V5X291dHBhdGhzW1tpXV0pCiAgCiAgICAjIHByaW50IHJlc3VsdHMgZm9yIHZpZXdpbmcKICAgIHByaW50KHJuYV9saWJyYXJ5KQogICAgcHJpbnQoaGVhZCh0dW1vcl9kZXNjcmlwdG9yX21vZGVsX3Jlc3VsdHMpKQogIAogICAgIyMjIyMjIyMjIyMjIyMjIyBwbG90IHJlc3VsdHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMjIyMjIyB0dWtleSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAKICAKICAgIHRkX21vZGVscyA8LSB1bmlxdWUoYXMuY2hhcmFjdGVyKHR1bW9yX2Rlc2NyaXB0b3JfbW9kZWxfcmVzdWx0c1tbInR1a2V5Il1dJGNvbXBhcmlzb24pKQogICAgdGRfbW9kZWxzIDwtIHNvcnQodGRfbW9kZWxzLCBkZWNyZWFzaW5nID0gRkFMU0UpCiAgICBwcmludCh0ZF9tb2RlbHMpCiAgCiAgICBmb3IodCBpbiBzZXFfYWxvbmcodGRfbW9kZWxzKSl7CiAgICAgIHByaW50KHQpCgogICAgICAjIFJlLW9yZGVyIGJhcnMKICAgICAgZGYgPC0gdHVtb3JfZGVzY3JpcHRvcl9tb2RlbF9yZXN1bHRzW1sidHVrZXkiXV0gJT4lCiAgICAgICAgZmlsdGVyKGNvbXBhcmlzb24gPT0gdGRfbW9kZWxzW3RdKSAlPiUgCiAgICAgICAgbXV0YXRlKGhhbGxtYXJrX25hbWVfaWQgPSBwYXN0ZTAoaGFsbG1hcmtfbmFtZSwgMTo1MCkpCiAgCiAgICAgIGRmJGhhbGxtYXJrX25hbWUgPC0gZmFjdG9yKGRmJGhhbGxtYXJrX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IHJldih1bmlxdWUoZGYkaGFsbG1hcmtfbmFtZVtvcmRlcihkZiR0dWtleV9wX3ZhbHVlLCBkZWNyZWFzaW5nID0gVFJVRSldKSkpICMgRmFjdG9yIGxldmVscyBpbiBpbmNyZWFzaW5nIG9yZGVyCiAgICAgIAogICAgICAjIyMjIyMgYmFycGxvdHMgIyMjIyMjIyMjIyMKICAgICAgbmFtZSA8LSBwYXN0ZTAoYmFycGxvdHNfZGlyLCAiLyIsICJnc3ZhX3R1a2V5XyIsIHJuYV9saWJyYXJ5X2xpc3RbaV0sICItIiwgdGRfbW9kZWxzW3RdLCAiLXR1bW9yX2Rlc2NyaXB0b3JfYmFycGxvdC5wZGYiKQogICAgICBwcmludChuYW1lKQogICAgICBwIDwtIGNyZWF0ZV9iYXJwbG90KGRmID0gZGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgeV92YWx1ZSA9IGRmJHR1a2V5X3BfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVfdmFsdWUgPSAidHVrZXlfcF92YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm5hX2xpYnJhcnkgPSBybmFfbGlicmFyeV9saXN0W2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRkX21vZGVsX2lkID0gdGRfbW9kZWxzW3RdKQogICAgICBwZGYoZmlsZSA9IG5hbWUsIHdpZHRoID0gMTIsIGhlaWdodCA9IDEwKQogICAgICBwcmludChwKQogICAgICBkZXYub2ZmKCkKICAgICAgCiAgICAgICMjIyMjIyBkaXZlcmdpbmcgYmFycGxvdHMgIyMjIyMjIyMjIyMKICAgICAgbmFtZSA8LSBwYXN0ZTAoZGl2ZXJnaW5nX2JhcnBsb3RzX2RpciwgIi8iLCAiZ3N2YV90dWtleV8iLCBybmFfbGlicmFyeV9saXN0W2ldLCAiLSIsIHRkX21vZGVsc1t0XSwgIi10dW1vcl9kZXNjcmlwdG9yX2RpdmVyZ2luZ19iYXJwbG90LnBkZiIpCiAgICAgIHByaW50KG5hbWUpCiAgICAgIHAgPC0gY3JlYXRlX2RpdmVyZ2luZ19iYXJwbG90KGRmID0gZGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfdmFsdWUgPSBkZiRwYXRod2F5X3Njb3JlX2RpZmZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlX3ZhbHVlID0gInR1a2V5X3BfdmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmFfbGlicmFyeSA9IHJuYV9saWJyYXJ5X2xpc3RbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX21vZGVsX2lkID0gdGRfbW9kZWxzW3RdKQogICAgICBwZGYoZmlsZSA9IG5hbWUsIHdpZHRoID0gMTIsIGhlaWdodCA9IDEwKQogICAgICBwcmludChwKQogICAgICBkZXYub2ZmKCkKICAgIAogICAgICAKICAgICAgCiAgICAgICMjIyMjIyBkb3QgcGxvdHMgIyMjIyMjIyMjIyMKICAgICAgZG90cGxvdF9uYW1lIDwtIHBhc3RlMChkb3RwbG90c19kaXIsICIvIiwgImdzdmFfdHVrZXlfIiwgcm5hX2xpYnJhcnlfbGlzdFtpXSwgIi0iLCB0ZF9tb2RlbHNbdF0sICItdHVtb3JfZGVzY3JpcHRvcl9kb3RwbG90LnBkZiIpCiAgICAgIHByaW50KGRvdHBsb3RfbmFtZSkKICAgICAgcCA8LSBjcmVhdGVfZG90cGxvdChkZiA9IGRmLAogICAgICAgICAgICAgICAgICAgICAgICAgIHhfdmFsdWUgPSBkZiRoYWxsbWFya19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIHlfdmFsdWUgPSBkZiR0dWtleV9wX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlX3ZhbHVlID0gInR1a2V5X3BfdmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJuYV9saWJyYXJ5ID0gcm5hX2xpYnJhcnlfbGlzdFtpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0ZF9tb2RlbF9pZCA9IHRkX21vZGVsc1t0XSkKICAgICAgcGRmKGZpbGUgPSBkb3RwbG90X25hbWUsIHdpZHRoID0gMTIsIGhlaWdodCA9IDEwKQogICAgICBwcmludChwKQogICAgICBkZXYub2ZmKCkKICAgICAgCiAgICAgICMjIyMjIyB2b2xjYW5vIHBsb3RzICMjIyMjIyMjIyMjCiAgICAgICMgVGhlIHNpZ25pZmljYW50bHkgZGlmZmVyZW50aWFsbHkgcGF0aHdheXMgYXJlIHRoZSBvbmVzIGZvdW5kIGluIHRoZSB1cHBlci1sZWZ0IGFuZCB1cHBlci1yaWdodCBjb3JuZXJzLgogICAgICAjIEFkZCBhIGNvbHVtbiB0byB0aGUgZGF0YSBmcmFtZSB0byBzcGVjaWZ5IGlmIHRoZXkgYXJlIFVQLSBvciBET1dOLSByZWd1bGF0ZWQgKHBhdGh3YXlfc2NvcmVfZGlmZmVyZW5jZSByZXNwZWN0aXZlbHkgcG9zaXRpdmUgb3IgbmVnYXRpdmUpCiAgICAgIAogICAgICAjU2V0IHNlZWQKICAgICAgc2V0LnNlZWQoMjAyMykKICAgICAgCiAgICAgICMgYWRkIGEgbmV3IGNvbHVtbiAKICAgICAgZGYkcGF0aF9kaWZmIDwtICJOb3Qgc2lnbmlmaWNhbnQiCiAgICAgIHBfdmFsdWUgPC0gZGYkdHVrZXlfcF92YWx1ZQogICAgICBzaWduaWZfcF92YWx1ZSA8LSAwLjA1CiAgICAgICMgaWYgcGF0aHdheV9zY29yZV9kaWZmZXJlbmNlID4gMCAgCiAgICAgIGRmJHBhdGhfZGlmZltkZiRwYXRod2F5X3Njb3JlX2RpZmZlcmVuY2UgPiAwICYgcF92YWx1ZSA8IHNpZ25pZl9wX3ZhbHVlXSA8LSAidG9wX3JhbmtlZF9kYXRhIgogICAgICBkZiRwYXRoX2RpZmZbZGYkcGF0aHdheV9zY29yZV9kaWZmZXJlbmNlID4gMCAmIHBfdmFsdWUgPiBzaWduaWZfcF92YWx1ZV0gPC0gIk5vdCBzaWduaWZpY2FudCIKCiAgICAgICMgaWYgcGF0aHdheV9zY29yZV9kaWZmZXJlbmNlIDwgMCAKICAgICAgZGYkcGF0aF9kaWZmW2RmJHBhdGh3YXlfc2NvcmVfZGlmZmVyZW5jZSA8IDAgJiBwX3ZhbHVlIDwgc2lnbmlmX3BfdmFsdWVdIDwtICJib3R0b21fcmFua2VkX2RhdGEiCiAgICAgIGRmJHBhdGhfZGlmZltkZiRwYXRod2F5X3Njb3JlX2RpZmZlcmVuY2UgPCAwICYgcF92YWx1ZSA+IHNpZ25pZl9wX3ZhbHVlXSA8LSAiTm90IHNpZ25pZmljYW50IgogICAgICAjIENyZWF0ZSBsYWJlbHMKICAgICAgZGYkbGFiZWxzIDwtIHdpdGgoZGYsIGlmZWxzZShwX3ZhbHVlIDwgMC4wNSwgaGFsbG1hcmtfbmFtZV9pZCwgIiIpKQogICAgICAKICAgICAgdm9sY2Fub19uYW1lIDwtIHBhc3RlMCh2b2xjYW5vX3Bsb3RzX2RpciwgIi8iLCAiZ3N2YV90dWtleV8iLCBybmFfbGlicmFyeV9saXN0W2ldLCAiLSIsIHRkX21vZGVsc1t0XSwgIi10dW1vcl9kZXNjcmlwdG9yX3ZvbGNhbm9fcGxvdC5wZGYiKQogICAgICBwcmludCh2b2xjYW5vX25hbWUpCiAgICAgIHAgPC0gY3JlYXRlX3ZvbGNhbm9fcGxvdChkZiA9IGRmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVfdmFsdWUgPSAidHVrZXlfcF92YWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmFfbGlicmFyeSA9IHJuYV9saWJyYXJ5X2xpc3RbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZF9tb2RlbF9pZCA9IHRkX21vZGVsc1t0XSkKICAgICAgcGRmKGZpbGUgPSB2b2xjYW5vX25hbWUsIHdpZHRoID0gMTIsIGhlaWdodCA9IDEwKQogICAgICBwcmludChwKQogICAgICBkZXYub2ZmKCkKICAgICAgCiAgICB9CiAgICAKICAgICMjIyMjIyBhbm92YSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIyMjIyMgYmFycGxvdHMgIyMjIyMjIyMjIyMgICAgCiAgICBuYW1lIDwtIHBhc3RlMChiYXJwbG90c19kaXIsICIvIiwgImdzdmFfYW5vdmFfIiwgcm5hX2xpYnJhcnlfbGlzdFtpXSwgIi10dW1vcl9kZXNjcmlwdG9yX2JhcnBsb3QucGRmIikKICAgIHByaW50KG5hbWUpCiAgCiAgICAjIFJlLW9yZGVyIGJhcnMKICAgIGRmIDwtIHR1bW9yX2Rlc2NyaXB0b3JfbW9kZWxfcmVzdWx0c1tbImFub3ZhIl1dCiAgICBkZiRoYWxsbWFya19uYW1lIDwtIGZhY3RvcihkZiRoYWxsbWFya19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gcmV2KHVuaXF1ZShkZiRoYWxsbWFya19uYW1lW29yZGVyKGRmJGFub3ZhX3BfdmFsdWUsIGRlY3JlYXNpbmcgPSBUUlVFKV0pKSkgIyBGYWN0b3IgbGV2ZWxzIGluIGluY3JlYXNpbmcgb3JkZXIKICAgIHAgPC0gY3JlYXRlX2JhcnBsb3QoZGYgPSBkZiwKICAgICAgICAgICAgICAgICAgICAgICAgeV92YWx1ZSA9IGRmJGFub3ZhX3BfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlX3ZhbHVlID0gImFub3ZhX3BfdmFsdWUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgcm5hX2xpYnJhcnkgPSBybmFfbGlicmFyeV9saXN0W2ldLAogICAgICAgICAgICAgICAgICAgICAgICB0ZF9tb2RlbF9pZCA9IE5VTEwpCiAgICBwZGYoZmlsZSA9IG5hbWUsIHdpZHRoID0gMTIsIGhlaWdodCA9IDEwKQogICAgcHJpbnQocCkKICAgIGRldi5vZmYoKQogICAgICAKICAgICMjIyMjIyBkb3QgcGxvdHMgIyMjIyMjIyMjIyMKICAgIGRvdHBsb3RfbmFtZSA8LSBwYXN0ZTAoZG90cGxvdHNfZGlyLCAiLyIsICJnc3ZhX2Fub3ZhXyIsIHJuYV9saWJyYXJ5LCAiLXR1bW9yX2Rlc2NyaXB0b3JfZG90cGxvdC5wZGYiKQogICAgcHJpbnQoZG90cGxvdF9uYW1lKQogICAgcCA8LSBjcmVhdGVfZG90cGxvdChkZiA9IHR1bW9yX2Rlc2NyaXB0b3JfbW9kZWxfcmVzdWx0c1tbImFub3ZhIl1dLAogICAgICAgICAgICAgICAgICAgICAgICB4X3ZhbHVlID0gdHVtb3JfZGVzY3JpcHRvcl9tb2RlbF9yZXN1bHRzW1siYW5vdmEiXV0kaGFsbG1hcmtfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgeV92YWx1ZSA9IHR1bW9yX2Rlc2NyaXB0b3JfbW9kZWxfcmVzdWx0c1tbImFub3ZhIl1dJGFub3ZhX3BfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlX3ZhbHVlID0gImFub3ZhX3BfdmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICBybmFfbGlicmFyeSA9IHJuYV9saWJyYXJ5X2xpc3RbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgIHRkX21vZGVsX2lkID0gTlVMTCkKICAgIHBkZihmaWxlID0gZG90cGxvdF9uYW1lLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSAxMCkKICAgIHByaW50KHApCiAgICBkZXYub2ZmKCkKICAgIH0KfQpgYGAKCgpgYGB7cn0Kc2Vzc2lvbkluZm8oKQpgYGAKCg==